﻿using System;
using UAssetAPI.UnrealTypes;

namespace UAssetAPI.CustomVersions
{
    /// <summary>
    /// Represents the engine version at the time that a custom version was implemented.
    /// </summary>
    [AttributeUsage(AttributeTargets.Field)]
    public class IntroducedAttribute : Attribute
    {
        public EngineVersion IntroducedVersion;

        public IntroducedAttribute(EngineVersion introducedVersion)
        {
            IntroducedVersion = introducedVersion;
        }
    }

    /// <summary>
    /// Custom serialization version for changes made in the //Fortnite/Main stream.
    /// </summary>
    public enum FFortniteMainBranchObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>World composition tile offset changed from 2d to 3d</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        WorldCompositionTile3DOffset,

        /// <summary>Minor material serialization optimization</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        MaterialInstanceSerializeOptimization_ShaderFName,

        /// <summary>Refactored cull distances to account for HLOD, explicit override and globals in priority</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        CullDistanceRefactor_RemovedDefaultDistance,
        [Introduced(EngineVersion.VER_UE4_20)]
        CullDistanceRefactor_NeverCullHLODsByDefault,
        [Introduced(EngineVersion.VER_UE4_20)]
        CullDistanceRefactor_NeverCullALODActorsByDefault,

        /// <summary>Support to remove morphtarget generated by bRemapMorphtarget</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        SaveGeneratedMorphTargetByEngine,

        /// <summary>Convert reduction setting options</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        ConvertReductionSettingOptions,

        /// <summary>Serialize the type of blending used for landscape layer weight static params</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        StaticParameterTerrainLayerWeightBlendType,

        /// <summary>Fix up None Named animation curve names,</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        FixUpNoneNameAnimationCurves,

        /// <summary>Ensure ActiveBoneIndices to have parents even not skinned for old assets</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        EnsureActiveBoneIndicesToContainParents,

        /// <summary>Serialize the instanced static mesh render data, to avoid building it at runtime</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        SerializeInstancedStaticMeshRenderData,

        /// <summary>Cache material quality node usage</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        CachedMaterialQualityNodeUsage,

        /// <summary>Font outlines no longer apply to drop shadows for new objects but we maintain the opposite way for backwards compat</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        FontOutlineDropShadowFixup,

        /// <summary>New skeletal mesh import workflow (Geometry only or animation only re-import )</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        NewSkeletalMeshImporterWorkflow,

        /// <summary>Migrate data from previous data structure to new one to support materials per LOD on the Landscape</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        NewLandscapeMaterialPerLOD,

        /// <summary>New Pose Asset data type</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        RemoveUnnecessaryTracksFromPose,

        /// <summary>Migrate Foliage TLazyObjectPtr to TSoftObjectPtr</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        FoliageLazyObjPtrToSoftObjPtr,

        /// <summary>TimelineTemplates store their derived names instead of dynamically generating. This code tied to this version was reverted and redone at a later date</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        REVERTED_StoreTimelineNamesInTemplate,

        /// <summary>Added BakePoseOverride for LOD setting</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        AddBakePoseOverrideForSkeletalMeshReductionSetting,

        /// <summary>TimelineTemplates store their derived names instead of dynamically generating</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        StoreTimelineNamesInTemplate,

        /// <summary>New Pose Asset data type</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        WidgetStopDuplicatingAnimations,

        /// <summary>Allow reducing of the base LOD, we need to store some imported model data so we can reduce again from the same data.</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        AllowSkeletalMeshToReduceTheBaseLOD,

        /// <summary>Curve Table size reduction</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        ShrinkCurveTableSize,

        /// <summary>Widgets upgraded with WidgetStopDuplicatingAnimations, may not correctly default-to-self for the widget parameter.</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        WidgetAnimationDefaultToSelfFail,

        /// <summary>HUDWidgets now require an element tag</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        FortHUDElementNowRequiresTag,

        /// <summary>Animation saved as bulk data when cooked</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        FortMappedCookedAnimation,

        /// <summary>Support Virtual Bone in Retarget Manager</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        SupportVirtualBoneInRetargeting,

        /// <summary>Fixup bad defaults in water metadata</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        FixUpWaterMetadata,

        /// <summary>Move the location of water metadata</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        MoveWaterMetadataToActor,

        /// <summary>Replaced lake collision component</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        ReplaceLakeCollision,

        /// <summary>Anim layer node names are now conformed by Guid</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        AnimLayerGuidConformation,

        /// <summary>Ocean collision component has become dynamic</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        MakeOceanCollisionTransient,

        /// <summary>FFieldPath will serialize the owner struct reference and only a short path to its property</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        FFieldPathOwnerSerialization,

        /// <summary>Simplified WaterBody post process material handling</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        FixUpUnderwaterPostProcessMaterial,

        /// <summary>A single water exclusion volume can now exclude N water bodies</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        SupportMultipleWaterBodiesPerExclusionVolume,

        /// <summary>Serialize rigvm operators one by one instead of the full byte code array to ensure determinism</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        RigVMByteCodeDeterminism,

        /// <summary>Serialize the physical materials generated by the render material</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        LandscapePhysicalMaterialRenderData,

        /// <summary>RuntimeVirtualTextureVolume fix transforms</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        FixupRuntimeVirtualTextureVolume,

        /// <summary>Retrieve water body collision components that were lost in cooked builds</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        FixUpRiverCollisionComponents,

        /// <summary>Fix duplicate spline mesh components on rivers</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        FixDuplicateRiverSplineMeshCollisionComponents,

        /// <summary>Indicates level has stable actor guids</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        ContainsStableActorGUIDs,

        /// <summary>Levelset Serialization support for BodySetup.</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        LevelsetSerializationSupportForBodySetup,

        /// <summary>Moving Chaos solver properties to allow them to exist in the project physics settings</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        ChaosSolverPropertiesMoved,

        /// <summary>Moving some UFortGameFeatureData properties and behaviors into the UGameFeatureAction pattern</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        GameFeatureData_MovedComponentListAndCheats,

        /// <summary>Add centrifugal forces for cloth</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        ChaosClothAddfictitiousforces,

        /// <summary>Chaos Convex StructureData supports different index sizes based on num verts/planes. Chaos FConvex uses array of FVec3s for vertices instead of particles (Merged from //UE4/Main)</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        ChaosConvexVariableStructureDataAndVerticesArray,

        /// <summary>Remove the WaterVelocityHeightTexture dependency on MPC_Landscape and LandscapeWaterIndo</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        RemoveLandscapeWaterInfo,

        // CHANGES BEYOND HERE ARE UE5 ONLY //

        /// <summary>Added the weighted value property type to store the cloths weight maps' low/high ranges</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothAddWeightedValue,

        /// <summary>Added the Long Range Attachment stiffness weight map</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothAddTetherStiffnessWeightMap,

        /// <summary>Fix corrupted LOD transition maps</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothFixLODTransitionMaps,

        /// <summary>Enable a few more weight maps to better art direct the cloth simulation</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothAddTetherScaleAndDragLiftWeightMaps,

        /// <summary>Enable material (edge, bending, and area stiffness) weight maps</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothAddMaterialWeightMaps,

        /// <summary>Added bShowCurve for movie scene float channel serialization</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        SerializeFloatChannelShowCurve,

        /// <summary>Minimize slack waste by using a single array for grass data</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        LandscapeGrassSingleArray,

        /// <summary>Add loop counters to sequencer's compiled sub-sequence data</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        AddedSubSequenceEntryWarpCounter,

        /// <summary>Water plugin is now component-based rather than actor based</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        WaterBodyComponentRefactor,

        /// <summary>Cooked BPGC storing editor-only asset tags</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        BPGCCookedEditorTags,

        /// <summary>Terrain layer weights are no longer considered material parameters</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        TTerrainLayerWeightsAreNotParameters,

        /// <summary>
        /// Anim Dynamics Node Gravity Override vector is now defined in world space, not simulation space.
        /// Legacy behavior can be maintained with a flag, which is set false by default for new nodes,
        /// true for nodes predating this change.
        /// </summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        GravityOverrideDefinedInWorldSpace,

        /// <summary>Anim Dynamics Node Physics parameters for each body in a chain are now stored in an array and can be edited.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        AnimDynamicsEditableChainParameters,

        /// <summary>Decoupled the generation of the water texture from the Water Brush and the landscape</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WaterZonesRefactor,

        /// <summary>Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        ChaosClothFasterDamping,

        /// <summary>Migrated function handlers to the CDO/archetype data</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        MigratedFunctionHandlersToDefaults,

        /// <summary>Storing inertia tensor as vec3 instead of matrix.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        ChaosInertiaConvertedToVec3,

        /// <summary>Migrated event definitions to the CDO/archetype data</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        MigratedEventDefinitionToDefaults,

        /// <summary>Serialize LevelInstanceActorGuid on new ILevelInstanceInterface implementation</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        LevelInstanceActorGuidSerialize,

        /// <summary>Single-frame/key AnimDataModel patch-up</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        SingleFrameAndKeyAnimModel,

        /// <summary>Remapped bEvaluateWorldPositionOffset to bEvaluateWorldPositionOffsetInRayTracing</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        RemappedEvaluateWorldPositionOffsetInRayTracing,

        /// <summary>Water body collision settings are now those of the base UPrimitiveComponent, rather than duplicated in UWaterBodyComponent</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WaterBodyComponentCollisionSettingsRefactor,

        /// <summary>
        /// Introducing widget inherited named slots.  This wouldn't have required a version bump, except in the previous
        /// version, users could make NamedSlots and then Seed them with any random widgets, as a sorta 'default' setup.
        /// In order to preserve that, we're bumping the version so that we can set a new field on UNamedSlot to control
        /// if a widget exposes its named slot to everyone (even if it has content), which by default they wont any longer.
        /// </summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WidgetInheritedNamedSlots,

        /// <summary>Added water HLOD material</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WaterHLODSupportAdded,

        /// <summary>Moved parameters affecting Skeleton pose rendering from the PoseWatch class to the PoseWatchPoseElement class.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        PoseWatchMigrateSkeletonDrawParametersToPoseElement,

        /// <summary>Reset default value for Water exclusion volumes to make them more intuitive and support the "it just works" philosophy.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WaterExclusionVolumeExcludeAllDefault,

        /// <summary>Added water non-tessellated LOD</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WaterNontessellatedLODSupportAdded,

        /// <summary>Added FHierarchicalSimplification::SimplificationMethod</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        HierarchicalSimplificationMethodEnumAdded,

        /// <summary>Changed how world partition streaming cells are named</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WorldPartitionStreamingCellsNamingShortened,

        /// <summary>Serialize ContentBundleGuid in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WorldPartitionActorDescSerializeContentBundleGuid,

        /// <summary>Serialize IsActorRuntimeOnly in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WorldPartitionActorDescSerializeActorIsRuntimeOnly,

        /// <summary>Add Nanite Material Override option to materials and material instances.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        NaniteMaterialOverride,

        /// <summary>Serialize HLOD stats in HLODActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        WorldPartitionHLODActorDescSerializeStats,

        /// <summary>WorldPartitionStreamingSourceComponent property deprecation</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        WorldPartitionStreamingSourceComponentTargetDeprecation,

        /// <summary>Fixed localization gathering for external actor packages</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        FixedLocalizationGatherForExternalActorPackage,

        /// <summary>Change HLODActors to RuntimeCells mapping to use a GUID instead of the cell name</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        WorldPartitionHLODActorUseSourceCellGuid,

        /// <summary>Add an attribute to geometry collection to track internal faces, rather than relying on material ID numbering</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        ChaosGeometryCollectionInternalFacesAttribute,

        /// <summary>Dynamic cast nodes use an enumerated pure node state to include a value for the default setting</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        DynamicCastNodesUsePureStateEnum,

        /// <summary>Add FWorldPartitionActorFilter to FLevelInstanceActorDesc/FDataLayerInstanceDesc</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorFilter,

        /// <summary>Change the non-spatialized radius to blend to a pure 2D spatialized sound vs omnidirectional</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        AudioAttenuationNonSpatializedRadiusBlend,

        /// <summary>Serialize actor class descriptors</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorClassDescSerialize,

        /// <summary>FActorContainerID is now an FGuid instead of a uint64</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionFActorContainerIDu64ToGuid,

        /// <summary>FDataLayerInstanceDesc support for private data layers</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionPrivateDataLayers,

        /// <summary>Reduce size and improve behaviour of Chaos::FImplicitObjectUnion</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        ChaosImplicitObjectUnionBVHRefactor,

        /// <summary>FLevelInstanceActorDesc DeltaSerialize Filter</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        LevelInstanceActorDescDeltaSerializeFilter,

        /// <summary>Fix the Nanite landscape mesh non-deterministic DDC keys</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        FixNaniteLandscapeMeshDDCKey,

        /// <summary>Change how connection graphs are stored on Geometry Collections to an edge-array representation</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        ChaosGeometryCollectionConnectionEdgeGroup,

        /// <summary>Moved the water info mesh data and static water body meshes into new static mesh components for water bodies.</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WaterBodyStaticMeshComponents,

        /// <summary>Serialize invalid bounds in world partition actor descriptors</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorDescSerializeInvalidBounds,

        /// <summary>Upgrade Navigation Links to use 64 bits for the ID</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        NavigationLinkID32To64,

        /// <summary>Serialize editor only references in world partition actor descriptors</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorDescSerializeEditorOnlyReferences,

        /// <summary>Add support for soft object paths in actor descriptors</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorDescSerializeSoftObjectPathSupport,

        /// <summary>Don't serialize class descriptor GUIDs</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionClasDescGuidTransient,

        /// <summary>Serialize ActorDesc bIsMainWorldOnly</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorDescIsMainWorldOnly,

        /// <summary>FWorldPartitionActorFilter go back to FString serialize of AssetPaths to avoid FArchiveReplaceOrClearExternalReferences clearing CDO references on BP Compile</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorFilterStringAssetPath,

        /// <summary>Add FPackedLevelActorDesc for APackedLevelActor and support for APackedLevelActor Filters</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        PackedLevelActorDesc,

        /// <summary>Add customizable values for several UWorldPartitionRuntimeSpatialHash cvars</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionRuntimeSpatialHashCVarOverrides,

        /// <summary>WorldPartition HLOD now contains a source actors object</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionHLODSourceActorsRefactor,

        [Introduced(EngineVersion.VER_UE5_3)]
        WaterBodyStaticMeshRename,

        /// <summary>Geometry Collection now by-default converts vertex colors to sRGB when creating render data</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        GeometryCollectionConvertVertexColorToSRGB,

        /// <summary>Water bodies before this version need to update their water zone on load since they won't have been serialized yet.</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WaterOwningZonePointerFixup,

        /// <summary>Set flags on water static meshes to duplicate transient to avoid underlying static mesh duplication issue</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WaterBodyStaticMeshDuplicateTransient,

        /// <summary>Update paths to use the SkeletalClass</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        MVVMConvertPropertyPathToSkeletalClass,

        /// <summary>Fixup all flags/outering on static meshes on water bodies by rebuilding them completely</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WaterBodyStaticMeshFixup,

        /// <summary>Binding extensions for anim graph nodes</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AnimGraphNodeBindingExtensions,

        /// <summary>Function data stores a map from work to debug operands</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        RigVMSaveDebugMapInGraphFunctionData,

        /// <summary>Fix missing binding extensions for some anim graph nodes</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        FixMissingAnimGraphNodeBindingExtensions,

        /// <summary>EditableWhenInherited: Skip custom serialization on non Archetypes</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        ISMComponentEditableWhenInheritedSkipSerialization,

        /// <summary>GrassTypes are now per-component, rather than per-landscape proxy :</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        LandscapeSupportPerComponentGrassTypes,

        /// <summary>World partition actor data layers activation logic operator support defaults for old maps</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        WorldPartitionDataLayersLogicOperatorAdded,

        /// <summary>Started sorting Possessables, Spawnables, and MovieSceneBindings for better search performance.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        MovieSceneSortedBindings,

        /// <summary>Remove the UAnimCurveCompressionCodec::InstanceGuid which causes cook determinism issues</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        RemoveAnimCurveCompressionCodecInstanceGuid,

        /// <summary>Serialize the source HLOD Layer for HLOD actor descriptors.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        WorldPartitionHLODActorDescSerializeSourceHLODLayer,

        /// <summary>Serialize custom editor bounds for HLOD actor descriptors.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        WorldPartitionHLODActorDescSerializeEditorBounds,

        /// <summary>Changed default Local Exposure Contrast from 1.0 to 0.8 (reverted)</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        LocalExposureDefaultChangeFrom1_Reverted,

        /// <summary>Added support of external packaging of Data Layer Instances</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AddDataLayerInstanceExternalPackage,

        /// <summary>Update paths to keep a flag if they are the widget BP</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        MVVMPropertyPathSelf,

        /// <summary>Enabled ObjectPtr property serialization for Dataflow nodes</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AddDataflowObjectSerialization,

        /// <summary>Add anim notify rate scaling, defaults to on for new content, off for old content</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AnimNotifyAddRateScale,

        /// <summary>Fix tangents for non-uniform build scales, and add a flag to optionally match the previous (incorrect) tangents</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        FixedTangentTransformForNonuniformBuildScale,

        /// <summary>AnimNode Layers will now start in a Shared Group, instead of being each one on a different group at runtime</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AnimNodeRootDefaultGroupChange,

        /// <summary>Move AnimNext graphs to sub-entries of assets</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AnimNextMoveGraphsToEntries,

        /// <summary>Removed debug information containing compressed data author, time etc. from animation DDC data as it introduces indeterminism</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        AnimationSequenceCompressedDataRemoveDebugData,

        /// <summary>Changes to Orthographic Camera default settings</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        OrthographicCameraDefaultSettings,

        /// <summary>Added settings to Landscape HLODs</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        LandscapeAddedHLODSettings,

        /// <summary>Skeletal Mesh uses Mesh Description to store mesh bulk data.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        MeshDescriptionForSkeletalMesh,

        /// <summary>Skeletal Mesh optionally cooks half edge data per lod</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        SkeletalHalfEdgeData,

        /// <summary>Combine graph contexts for AnimNext graphs</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextCombineGraphContexts,

        /// <summary>Combine parameter blocks and graphs</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextCombineParameterBlocksAndGraphs,

        /// <summary>Move workspaces to a seperate plugin</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextMoveWorkspaces,

        /// <summary>Level Instance Property overrides</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LevelInstancePropertyOverrides,

        /// <summary>Added FVolumetricLightMapGridDesc in MapBuildData</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        VolumetricLightMapGridDescSupport,

        /// <summary>Introduce new structure for customizing the landscape edit layer behavior</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        IntroduceLandscapeEditLayerClass,

        /// <summary>Change workspaces to store asset references as external objects</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextWorkspaceEntryConversion,

        /// <summary>Add support for anytype in dataflow</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        DataflowAnyTypeSupport,

        /// <summary>Adding a new flag in RBAN Solver Setting to be able to use manifolds</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        PhysicsAssetUseManifoldFlags,

        /// <summary>Added support for to record sim and query data of Shape Instance data in CVD</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        SimAndQueryDataSupportInChaosVisualDebugger,

        /// <summary>Add the imported asset dependencies to the Cloth Asset USD Import node</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        ChaosClothAssetUSDImportNodeAddAssetDependencies,

        /// <summary>Changed HitLighting to HitLightingForReflections, and HitLighting now means hit lighting for entire Lumen</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LumenRayLightingModeOverrideEnum,

        /// <summary>PCGPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        PCGPartitionActorDesc,

        /// <summary>Target layers are now defined in the Landscape actor and not continuously synced from the assigned material.</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LandscapeTargetLayersInLandscapeActor,

        /// <summary>Fix to get full name of templated type ( Tarray > TArray<Float> for example )</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        DataflowTemplatedTypeFix,

        /// <summary>Changes for LevelInstance support in StaticLighting</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LevelInstanceStaticLightingSupport,

        /// <summary>PCGGridDescriptor</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        PCGGridDescriptor,

        /// <summary>AnimNext graphs now have public/private state</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextGraphAccessSpecifiers,

        /// <summary>Added a more stable pixel depth offset mode.</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        MaterialPixelDepthOffsetMode,

        /// <summary>Added hideable pins to dataflow</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        DataflowHideablePins,

        /// <summary>Added multiple section import to the cloth asset skeletal mesh import node</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        ClothAssetSkeletalMeshMultiSectionImport,

        /// <summary>Serialize EditorBounds in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        WorldPartitionActorDescSerializeEditorBounds,

        /// <summary>Fixup for the data that has been damaged by LandscapeTargetLayersInLandscapeActor (loss of landscape layer info object assignments)</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        FixupLandscapeTargetLayersInLandscapeActor,

        //Allow custom import of morph target
        [Introduced(EngineVersion.VER_UE5_5)]
        MorphTargetCustomImport,

        /// <summary>Fix chaos cloth buckling stiffness parameter bug </summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        ChaosClothAllowZeroBucklingStiffness,

        /// <summary>LevelSequenceUpgradeDynamicBindings was removed but was intended for this position. Putting this here to make sure versioning of subsequent assets remains the same</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LevelSequenceUpgradeDynamicBindings_NoOp,

        /// <summary>AddToFrontend GFA now defaults to unload plugin on exit frontend</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        GameFeatureDataActionAddToFrontendDefaultToUnload,

        /// <summary>Upgraded movie scene 'dynamic bindings' to use the new Custom Bindings system</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LevelSequenceUpgradeDynamicBindings,

        /// <summary>Changed the precision for the stored rotation on kinematic targets to match the precision used in particles </summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        ChaosStoreKinematicTargetRotationAsSinglePrecision,

        /// <summary>PCG changes around the ApplyOnActor node, where we collapsed the TargetActor to the input pin.</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        PCGApplyOnActorNodeMoveTargetActorEdgeToInput,

        /// <summary>Deprecation of the bPlaying flag on FTimeline struct types in favor of a better</summary>
        /// <summary>PlayingStateTracker type to improve replication reliability </summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        TimelinePlayingStateTrackerDeprecation,

        /// <summary>Enable SkipOnlyEditorOnly style cooking of UStaticMeshComponent::MeshPaintTexture</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        MeshPaintTextureUsesEditorOnly,

        /// <summary>Fixup and synchronize some landscape properties that have moved to the property sharing/overriding system :</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        LandscapeBodyInstanceAsSharedProperty,

        /// <summary>Multiple changes to AnimNext modules, variables etc.</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        AnimNextModuleRefactor,

        /// <summary>Subsurface profile now has a guid to be able to select one of many in a Substrate material.</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        SubsurfaceProfileGuid,

        /// <summary>Added support for to record the new solver iteration settings in CVD</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        SolverIterationsDataSupportInChaosVisualDebugger,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    };

    /// <summary>
    /// Custom serialization version for changes made in Dev-Framework stream.
    /// </summary>
    public enum FFrameworkObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>BodySetup's default instance collision profile is used by default when creating a new instance.</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        UseBodySetupCollisionProfile,

        /// <summary>Regenerate subgraph arrays correctly in animation blueprints to remove duplicates and add missing graphs that appear read only when edited</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        AnimBlueprintSubgraphFix,

        /// <summary>Static and skeletal mesh sockets now use the specified scale</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        MeshSocketScaleUtilization,

        /// <summary>Attachment rules are now explicit in how they affect location, rotation and scale</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        ExplicitAttachmentRules,

        /// <summary>Moved compressed anim data from uasset to the DDC</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        MoveCompressedAnimDataToTheDDC,

        /// <summary>Some graph pins created using legacy code seem to have lost the RF_Transactional flag, which causes issues with undo. Restore the flag at this version</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        FixNonTransactionalPins,

        /// <summary>Create new struct for SmartName, and use that for CurveName</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        SmartNameRefactor,

        /// <summary>Add Reference Skeleton to Rig</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        AddSourceReferenceSkeletonToRig,

        /// <summary>Refactor ConstraintInstance so that we have an easy way to swap behavior paramters</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        ConstraintInstanceBehaviorParameters,

        /// <summary>Pose Asset support mask per bone</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        PoseAssetSupportPerBoneMask,

        /// <summary>Physics Assets now use SkeletalBodySetup instead of BodySetup</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        PhysAssetUseSkeletalBodySetup,

        /// <summary>Remove SoundWave CompressionName</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        RemoveSoundWaveCompressionName,

        /// <summary>Switched render data for clothing over to unreal data, reskinned to the simulation mesh</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        AddInternalClothingGraphicalSkinning,

        /// <summary>Wheel force offset is now applied at the wheel instead of vehicle COM</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        WheelOffsetIsFromWheel,

        /// <summary>Move curve metadata to be saved in skeleton. Individual asset still saves some flag - i.e. disabled curve and editable or not, but major flag - i.e. material types - moves to skeleton and handle in one place</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        MoveCurveTypesToSkeleton,

        /// <summary>Cache destructible overlaps on save</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        CacheDestructibleOverlaps,

        /// <summary>Added serialization of materials applied to geometry cache objects</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        GeometryCacheMissingMaterials,

        /// <summary>Switch static and skeletal meshes to calculate LODs based on resolution-independent screen size</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        LODsUseResolutionIndependentScreenSize,

        /// <summary>Blend space post load verification</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        BlendSpacePostLoadSnapToGrid,

        /// <summary>Addition of rate scales to blend space samples</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        SupportBlendSpaceRateScale,

        /// <summary>LOD hysteresis also needs conversion from the LODsUseResolutionIndependentScreenSize version</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        LODHysteresisUseResolutionIndependentScreenSize,

        /// <summary>AudioComponent override subtitle priority default change</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        ChangeAudioComponentOverrideSubtitlePriorityDefault,

        /// <summary>Serialize hard references to sound files when possible</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        HardSoundReferences,

        /// <summary>Enforce const correctness in Animation Blueprint function graphs</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        EnforceConstInAnimBlueprintFunctionGraphs,

        /// <summary>Upgrade the InputKeySelector to use a text style</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        InputKeySelectorTextStyle,

        /// <summary>Represent a pins container type as an enum not 3 independent booleans</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        EdGraphPinContainerType,

        /// <summary>Switch asset pins to store as string instead of hard object reference</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        ChangeAssetPinsToString,

        /// <summary>Fix Local Variables so that the properties are correctly flagged as blueprint visible</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        LocalVariablesBlueprintVisible,

        /// <summary>Stopped serializing UField_Next so that UFunctions could be serialized in dependently of a UClass in order to allow us to do all UFunction loading in a single pass (after classes and CDOs are created)</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        RemoveUField_Next,

        /// <summary>Fix User Defined structs so that all members are correct flagged blueprint visible</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        UserDefinedStructsBlueprintVisible,

        /// <summary>FMaterialInput and FEdGraphPin store their name as FName instead of FString</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        PinsStoreFName,

        /// <summary>User defined structs store their default instance, which is used for initializing instances</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        UserDefinedStructsStoreDefaultInstance,

        /// <summary>Function terminator nodes serialize an FMemberReference rather than a name/class pair</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        FunctionTerminatorNodesUseMemberReference,

        /// <summary>Custom event and non-native interface event implementations add 'const' to reference parameters</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        EditableEventsUseConstRefParameters,

        /// <summary>No longer serialize the legacy flag that indicates this state, as it is now implied since we don't serialize the skeleton CDO</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        BlueprintGeneratedClassIsAlwaysAuthoritative,

        /// <summary>Enforce visibility of blueprint functions - e.g. raise an error if calling a private function from another blueprint:</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        EnforceBlueprintFunctionVisibility,

        /// <summary>ActorComponents now store their serialization index</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        StoringUCSSerializationIndex,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    };

    /// <summary>
    /// Custom serialization version for changes made in Dev-Core stream.
    /// </summary>
    public enum FCoreObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        [Introduced(EngineVersion.VER_UE4_12)]
        MaterialInputNativeSerialize,

        [Introduced(EngineVersion.VER_UE4_15)]
        EnumProperties,

        [Introduced(EngineVersion.VER_UE4_22)]
        SkeletalMaterialEditorDataStripping,

        [Introduced(EngineVersion.VER_UE4_25)]
        FProperties,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    };

    /// <summary>
    /// Custom serialization version for changes made in Dev-Editor stream.
    /// </summary>
    public enum FEditorObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Localizable text gathered and stored in packages is now flagged with a localizable text gathering process version</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        GatheredTextProcessVersionFlagging,

        /// <summary>Fixed several issues with the gathered text cache stored in package headers</summary>
        [Introduced(EngineVersion.VER_UE4_12)]
        GatheredTextPackageCacheFixesV1,

        /// <summary>Added support for "root" meta-data (meta-data not associated with a particular object in a package)</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        RootMetaDataSupport,

        /// <summary>Fixed issues with how Blueprint bytecode was cached</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        GatheredTextPackageCacheFixesV2,

        /// <summary>Updated FFormatArgumentData to allow variant data to be marshaled from a BP into C++</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        TextFormatArgumentDataIsVariant,

        /// <summary>Changes to SplineComponent</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        SplineComponentCurvesInStruct,

        /// <summary>Updated ComboBox to support toggling the menu open, better controller support</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        ComboBoxControllerSupportUpdate,

        /// <summary>Refactor mesh editor materials</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        RefactorMeshEditorMaterials,

        /// <summary>Added UFontFace assets</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        AddedFontFaceAssets,

        /// <summary>Add UPROPERTY for TMap of Mesh section, so the serialize will be done normally (and export to text will work correctly)</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        UPropertryForMeshSection,

        /// <summary>Update the schema of all widget blueprints to use the WidgetGraphSchema</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        WidgetGraphSchema,

        /// <summary>Added a specialized content slot to the background blur widget</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        AddedBackgroundBlurContentSlot,

        /// <summary>Updated UserDefinedEnums to have stable keyed display names</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        StableUserDefinedEnumDisplayNames,

        /// <summary>Added "Inline" option to UFontFace assets</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        AddedInlineFontFaceAssets,

        /// <summary>Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        UPropertryForMeshSectionSerialize,

        /// <summary>Adding a version bump for the new fast widget construction in case of problems.</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        FastWidgetTemplates,

        /// <summary>Update material thumbnails to be more intelligent on default primitive shape for certain material types</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        MaterialThumbnailRenderingChanges,

        /// <summary>Introducing a new clipping system for Slate/UMG</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        NewSlateClippingSystem,

        /// <summary>MovieScene Meta Data added as native Serialization</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        MovieSceneMetaDataSerialization,

        /// <summary>Text gathered from properties now adds two variants: a version without the package localization ID (for use at runtime), and a version with it (which is editor-only)</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        GatheredTextEditorOnlyPackageLocId,

        /// <summary>Added AlwaysSign to FNumberFormattingOptions</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddedAlwaysSignNumberFormattingOption,

        /// <summary>Added additional objects that must be serialized as part of this new material feature</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddedMaterialSharedInputs,

        /// <summary>Added morph target section indices</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddedMorphTargetSectionIndices,

        /// <summary>Serialize the instanced static mesh render data, to avoid building it at runtime</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        SerializeInstancedStaticMeshRenderData,

        /// <summary>Change to MeshDescription serialization (moved to release)</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        MeshDescriptionNewSerialization_MovedToRelease,

        /// <summary>New format for mesh description attributes</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        MeshDescriptionNewAttributeFormat,

        /// <summary>Switch root component of SceneCapture actors from MeshComponent to SceneComponent</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        ChangeSceneCaptureRootComponent,

        /// <summary>StaticMesh serializes MeshDescription instead of RawMesh</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        StaticMeshDeprecatedRawMesh,

        /// <summary>MeshDescriptionBulkData contains a Guid used as a DDC key</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        MeshDescriptionBulkDataGuid,

        /// <summary>Change to MeshDescription serialization (removed FMeshPolygon::HoleContours)</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        MeshDescriptionRemovedHoles,

        /// <summary>Change to the WidgetCompoent WindowVisibilty default value</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        ChangedWidgetComponentWindowVisibilityDefault,

        /// <summary>Avoid keying culture invariant display strings during serialization to avoid non-deterministic cooking issues</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        CultureInvariantTextSerializationKeyStability,

        /// <summary>Change to UScrollBar and UScrollBox thickness property (removed implicit padding of 2, so thickness value must be incremented by 4).</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        ScrollBarThicknessChange,

        /// <summary>Deprecated LandscapeHoleMaterial</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        RemoveLandscapeHoleMaterial,

        /// <summary>MeshDescription defined by triangles instead of arbitrary polygons</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        MeshDescriptionTriangles,

        /// <summary>Add weighted area and angle when computing the normals</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        ComputeWeightedNormals,

        /// <summary>SkeletalMesh now can be rebuild in editor, no more need to re-import</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        SkeletalMeshBuildRefactor,

        /// <summary>Move all SkeletalMesh source data into a private uasset in the same package has the skeletalmesh</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        SkeletalMeshMoveEditorSourceDataToPrivateAsset,

        /// <summary>Parse text only if the number is inside the limits of its type</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        NumberParsingOptionsNumberLimitsAndClamping,

        /// <summary>Make sure we can have more then 255 material in the skeletal mesh source data</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        SkeletalMeshSourceDataSupport16bitOfMaterialNumber,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    };

    /// <summary>
    /// Custom serialization version for changes made in Dev-AnimPhys stream
    /// </summary>
    public enum FAnimPhysObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded,

        /// <summary>convert animnode look at to use just default axis instead of enum, which doesn't do much</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        ConvertAnimNodeLookAtAxis,

        /// <summary>Change FKSphylElem and FKBoxElem to use Rotators not Quats for easier editing</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        BoxSphylElemsUseRotators,

        /// <summary>Change thumbnail scene info and asset import data to be transactional</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        ThumbnailSceneInfoAndAssetImportDataAreTransactional,

        /// <summary>Enabled clothing masks rather than painting parameters directly</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        AddedClothingMaskWorkflow,

        /// <summary>Remove UID from smart name serialize, it just breaks determinism</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        RemoveUIDFromSmartNameSerialize,

        /// <summary>Convert FName Socket to FSocketReference and added TargetReference that support bone and socket</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        CreateTargetReference,

        /// <summary>Tune soft limit stiffness and damping coefficients</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        TuneSoftLimitStiffnessAndDamping,

        /// <summary>Fix possible inf/nans in clothing particle masses</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        FixInvalidClothParticleMasses,

        /// <summary>Moved influence count to cached data</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        CacheClothMeshInfluences,

        /// <summary>Remove GUID from Smart Names entirely + remove automatic name fixup</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        SmartNameRefactorForDeterministicCooking,

        /// <summary>rename the variable and allow individual curves to be set</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        RenameDisableAnimCurvesToAllowAnimCurveEvaluation,

        /// <summary>link curve to LOD, so curve metadata has to include LODIndex</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        AddLODToCurveMetaData,

        /// <summary>Fixed blend profile references persisting after paste when they aren't compatible</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        FixupBadBlendProfileReferences,

        /// <summary>Allowing multiple audio plugin settings</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AllowMultipleAudioPluginSettings,

        /// <summary>Change RetargetSource reference to SoftObjectPtr</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        ChangeRetargetSourceReferenceToSoftObjectPtr,

        /// <summary>Save editor only full pose for pose asset</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        SaveEditorOnlyFullPoseForPoseAsset,

        /// <summary>Asset change and cleanup to facilitate new streaming system</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        GeometryCacheAssetDeprecation,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    /// <summary>
    /// Custom serialization version for changes made in Release streams.
    /// </summary>
    public enum FReleaseObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Static Mesh extended bounds radius fix</summary>
        [Introduced(EngineVersion.VER_UE4_11)]
        StaticMeshExtendedBoundsFix,

        /// <summary>Physics asset bodies are either in the sync scene or the async scene, but not both</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        NoSyncAsyncPhysAsset,

        /// <summary>ULevel was using TTransArray incorrectly (serializing the entire array in addition to individual mutations). converted to a TArray</summary>
        [Introduced(EngineVersion.VER_UE4_13)]
        LevelTransArrayConvertedToTArray,

        /// <summary>Add Component node templates now use their own unique naming scheme to ensure more reliable archetype lookups.</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        AddComponentNodeTemplateUniqueNames,

        /// <summary>Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        UPropertryForMeshSectionSerialize,

        /// <summary>Existing HLOD settings screen size to screen area conversion</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        ConvertHLODScreenSize,

        /// <summary>Adding mesh section info data for existing billboard LOD models</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        SpeedTreeBillboardSectionInfoFixup,

        /// <summary>Change FMovieSceneEventParameters::StructType to be a string asset reference from a TWeakObjectPtr UScriptStruct</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        EventSectionParameterStringAssetRef,

        /// <summary>Remove serialized irradiance map data from skylight.</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        SkyLightRemoveMobileIrradianceMap,

        /// <summary>rename bNoTwist to bAllowTwist</summary>
        [Introduced(EngineVersion.VER_UE4_17)]
        RenameNoTwistToAllowTwistInTwoBoneIK,

        /// <summary>Material layers serialization refactor</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        MaterialLayersParameterSerializationRefactor,

        /// <summary>Added disable flag to skeletal mesh data</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddSkeletalMeshSectionDisable,

        /// <summary>Removed objects that were serialized as part of this material feature</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        RemovedMaterialSharedInputCollection,

        /// <summary>HISMC Cluster Tree migration to add new data</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        HISMCClusterTreeMigration,

        /// <summary>Default values on pins in blueprints could be saved incoherently</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        PinDefaultValuesVerified,

        /// <summary>During copy and paste transition getters could end up with broken state machine references</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        FixBrokenStateMachineReferencesInTransitionGetters,

        /// <summary>Change to MeshDescription serialization</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        MeshDescriptionNewSerialization,

        /// <summary>Change to not clamp RGB values > 1 on linear color curves</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        UnclampRGBColorCurves,

        /// <summary>BugFix for FAnimObjectVersion::LinkTimeAnimBlueprintRootDiscovery.</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        LinkTimeAnimBlueprintRootDiscoveryBugFix,

        /// <summary>Change trail anim node variable deprecation</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        TrailNodeBlendVariableNameChange,

        /// <summary>Make sure the Blueprint Replicated Property Conditions are actually serialized properly.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        PropertiesSerializeRepCondition,

        /// <summary>DepthOfFieldFocalDistance at 0 now disables DOF instead of DepthOfFieldFstop at 0.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        FocalDistanceDisablesDOF,

        /// <summary>Removed versioning, but version entry must still exist to keep assets saved with this version loadable</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        Unused_SoundClass2DReverbSend,

        /// <summary>Groom asset version</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        GroomAssetVersion1,

        /// <summary>Groom asset version</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        GroomAssetVersion2,

        /// <summary>Store applied version of Animation Modifier to use when reverting</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        SerializeAnimModifierState,

        /// <summary>Groom asset version</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        GroomAssetVersion3,

        /// <summary>Upgrade filmback</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        DeprecateFilmbackSettings,

        /// <summary>custom collision type</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        CustomImplicitCollisionType,

        /// <summary>FFieldPath will serialize the owner struct reference and only a short path to its property</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        FFieldPathOwnerSerialization,

        /// <summary>Dummy version to allow us to Fix up the fact that ReleaseObjectVersion was changed elsewhere</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        ReleaseUE4VersionFixup,

        /// <summary>Pin types include a flag that propagates the 'CPF_UObjectWrapper' flag to generated properties</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        PinTypeIncludesUObjectWrapperFlag,

        /// <summary>Added Weight member to FMeshToMeshVertData</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        WeightFMeshToMeshVertData,

        /// <summary>Animation graph node bindings displayed as pins</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        AnimationGraphNodeBindingsDisplayedAsPins,

        /// <summary>Serialized rigvm offset segment paths</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        SerializeRigVMOffsetSegmentPaths,

        /// <summary>Upgrade AbcGeomCacheImportSettings for velocities</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        AbcVelocitiesSupport,

        /// <summary>Add margin support to Chaos Convex</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        MarginAddedToConvexAndBox,

        /// <summary>Add structure data to Chaos Convex</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        StructureDataAddedToConvex,

        /// <summary>Changed axis UI for LiveLink AxisSwitch Pre Processor</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        AddedFrontRightUpAxesToLiveLinkPreProcessor,

        /// <summary>Some sequencer event sections that were copy-pasted left broken links to the director BP</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        FixupCopiedEventSections,

        /// <summary>Serialize the number of bytes written when serializing function arguments</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        RemoteControlSerializeFunctionArgumentsSize,

        /// <summary>Add loop counters to sequencer's compiled sub-sequence data</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        AddedSubSequenceEntryWarpCounter,

        /// <summary>Remove default resolution limit of 512 pixels for cubemaps generated from long-lat sources</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        LonglatTextureCubeDefaultMaxResolution,

        // bake center of mass into chaos cache
        [Introduced(EngineVersion.VER_UE5_0)]
        GeometryCollectionCacheRemovesMassToLocal,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    /// <summary>
    /// Version used for serializing asset registry caches, both runtime and editor
    /// </summary>
    public enum FAssetRegistryVersion
    {
        /// <summary>From before file versioning was implemented</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        PreVersioning = 0,

        /// <summary>The first version of the runtime asset registry to include file versioning.</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        HardSoftDependencies,

        /// <summary>Added FAssetRegistryState and support for piecemeal serialization</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddAssetRegistryState,

        /// <summary>AssetData serialization format changed, versions before this are not readable</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        ChangedAssetData,

        /// <summary>Removed MD5 hash from package data</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        RemovedMD5Hash,

        /// <summary>Added hard/soft manage references</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddedHardManage,

        /// <summary>Added MD5 hash of cooked package to package data</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddedCookedMD5Hash,

        /// <summary>Added UE::AssetRegistry::EDependencyProperty to each dependency</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddedDependencyFlags,

        /// <summary>Major tag format change that replaces USE_COMPACT_ASSET_REGISTRY:</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        FixedTags,

        /// <summary>Added Version information to AssetPackageData</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        WorkspaceDomain,

        /// <summary>Added ImportedClasses to AssetPackageData</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        PackageImportedClasses,

        /// <summary>A new version number of UE5 was added to FPackageFileSummary</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        PackageFileSummaryVersionChange,

        /// <summary>Change to linker export/import resource serializationn</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        ObjectResourceOptionalVersionChange,

        /// <summary>Added FIoHash for each FIoChunkId in the package to the AssetPackageData.</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddedChunkHashes,

        /// <summary>Classes are serialized as path names rather than short object names, e.g. /Script/Engine.StaticMesh</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        ClassPaths,

        /// <summary>Asset bundles are serialized as FTopLevelAssetPath instead of FSoftObjectPath, deprecated FAssetData::ObjectPath</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        RemoveAssetPathFNames,

        /// <summary>Added header with bFilterEditorOnlyData flag</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AddedHeader,

        /// <summary>Added Extension to AssetPackageData.</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        AssetPackageDataHasExtension,		

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    public enum FSequencerObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Per-platform overrides player overrides for media sources changed name and type.</summary>
        [Introduced(EngineVersion.VER_UE4_14)]
        RenameMediaSourcePlatformPlayers,

        /// <summary>Enable root motion isn't the right flag to use, but force root lock</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        ConvertEnableRootMotionToForceRootLock,

        /// <summary>Convert multiple rows to tracks</summary>
        [Introduced(EngineVersion.VER_UE4_15)]
        ConvertMultipleRowsToTracks,

        /// <summary>When finished now defaults to restore state</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        WhenFinishedDefaultsToRestoreState,

        /// <summary>EvaluationTree added</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        EvaluationTree,

        /// <summary>When finished now defaults to project default</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        WhenFinishedDefaultsToProjectDefault,

        /// <summary>Use int range rather than float range in FMovieSceneSegment</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        FloatToIntConversion,

        /// <summary>Purged old spawnable blueprint classes from level sequence assets</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        PurgeSpawnableBlueprints,

        /// <summary>Finish UMG evaluation on end</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        FinishUMGEvaluation,

        /// <summary>Manual serialization of float channel</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        SerializeFloatChannel,

        /// <summary>Change the linear keys so they act the old way and interpolate always.</summary>
        [Introduced(EngineVersion.VER_UE4_22)]
        ModifyLinearKeysForOldInterp,

        /// <summary>Full Manual serialization of float channel</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        SerializeFloatChannelCompletely,

        /// <summary>Set ContinuouslyRespawn to false by default, added FMovieSceneSpawnable::bNetAddressableName</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        SpawnableImprovements,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    public enum FFortniteReleaseBranchCustomObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Custom 14.10 File Object Version</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        DisableLevelset_v14_10,

        /// <summary>Add the long range attachment tethers to the cloth asset to avoid a large hitch during the cloth's initialization.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothAddTethersToCachedData,

        /// <summary>Chaos::TKinematicTarget no longer stores a full transform, only position/rotation.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosKinematicTargetRemoveScale,

        /// <summary>Move UCSModifiedProperties out of ActorComponent and in to sparse storage</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        ActorComponentUCSModifiedPropertiesSparseStorage,

        /// <summary>Fixup Nanite meshes which were using the wrong material and didn't have proper UVs :</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        FixupNaniteLandscapeMeshes,

        /// <summary>Remove any cooked collision data from nanite landscape / editor spline meshes since collisions are not needed there :</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        RemoveUselessLandscapeMeshesCookedCollisionData,

        /// <summary>Serialize out UAnimCurveCompressionCodec::InstanceGUID to maintain deterministic DDC key generation in cooked-editor</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        SerializeAnimCurveCompressionCodecGuidOnCook,

        /// <summary>Fix the Nanite landscape mesh being reused because of a bad name</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        FixNaniteLandscapeMeshNames,

        /// <summary>Fixup and synchronize shared properties modified before the synchronicity enforcement</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        LandscapeSharedPropertiesEnforcement,

        /// <summary>Include the cell size when computing the cell guid</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionRuntimeCellGuidWithCellSize,

        /// <summary>Enable SkipOnlyEditorOnly style cooking of NaniteOverrideMaterial</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        NaniteMaterialOverrideUsesEditorOnly,

        /// <summary>Store game thread particles data in single precision</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        SinglePrecisonParticleData,

        /// <summary>UPCGPoint custom serialization</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        PCGPointStructuredSerializer,

        /// <summary>Deprecation of Nav Movement Properties and moving them to a new struct</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        NavMovementComponentMovingPropertiesToStruct,

        /// <summary>Add bone serialization for dynamic mesh attributes</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        DynamicMeshAttributesSerializeBones,

        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    public enum FUE5ReleaseStreamObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Added Lumen reflections to new reflection enum, changed defaults</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        ReflectionMethodEnum,

        /// <summary>Serialize HLOD info in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        WorldPartitionActorDescSerializeHLODInfo,

        /// <summary>Removing Tessellation from materials and meshes.</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        RemovingTessellation,

        /// <summary>LevelInstance serialize runtime behavior</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        LevelInstanceSerializeRuntimeBehavior,

        /// <summary>Refactoring Pose Asset runtime data structures</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        PoseAssetRuntimeRefactor,

        /// <summary>Serialize the folder path of actor descs</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        WorldPartitionActorDescSerializeActorFolderPath,

        /// <summary>Change hair strands vertex format</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        HairStrandsVertexFormatChange,

        /// <summary>Added max linear and angular speed to Chaos bodies</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        AddChaosMaxLinearAngularSpeed,

        /// <summary>PackedLevelInstance version</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        PackedLevelInstanceVersion,

        /// <summary>PackedLevelInstance bounds fix</summary>
        [Introduced(EngineVersion.VER_UE5_0EA)]
        PackedLevelInstanceBoundsFix,

        /// <summary>Custom property anim graph nodes (linked anim graphs, control rig etc.) now use optional pin manager</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        CustomPropertyAnimGraphNodesUseOptionalPinManager,

        /// <summary>Add native double and int64 support to FFormatArgumentData</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        TextFormatArgumentData64bitSupport,

        /// <summary>Material layer stacks are no longer considered 'static parameters'</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        MaterialLayerStacksAreNotParameters,

        /// <summary>CachedExpressionData is moved from UMaterial to UMaterialInterface</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        MaterialInterfaceSavedCachedData,

        /// <summary>Add support for multiple cloth deformer LODs to be able to raytrace cloth with a different LOD than the one it is rendered with</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        AddClothMappingLODBias,

        /// <summary>Add support for different external actor packaging schemes</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        AddLevelActorPackagingScheme,

        /// <summary>Add support for linking to the attached parent actor in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        WorldPartitionActorDescSerializeAttachParent,

        /// <summary>Converted AActor GridPlacement to bIsSpatiallyLoaded flag</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ConvertedActorGridPlacementToSpatiallyLoadedFlag,

        /// <summary>Fixup for bad default value for GridPlacement_DEPRECATED</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ActorGridPlacementDeprecateDefaultValueFixup,

        /// <summary>PackedLevelActor started using FWorldPartitionActorDesc (not currently checked against but added as a security)</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        PackedLevelActorUseWorldPartitionActorDesc,

        /// <summary>Add support for actor folder objects</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        AddLevelActorFolders,

        /// <summary>Remove FSkeletalMeshLODModel bulk datas</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        RemoveSkeletalMeshLODModelBulkDatas,

        /// <summary>Exclude brightness from the EncodedHDRCubemap,</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ExcludeBrightnessFromEncodedHDRCubemap,

        /// <summary>Unified volumetric cloud component quality sample count slider between main and reflection views for consistency</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        VolumetricCloudSampleCountUnification,

        /// <summary>Pose asset GUID generated from source AnimationSequence</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        PoseAssetRawDataGUID,

        /// <summary>Convolution bloom now take into account FPostProcessSettings::BloomIntensity for scatter dispersion.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ConvolutionBloomIntensity,

        /// <summary>Serialize FHLODSubActors instead of FGuids in WorldPartition HLODActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        WorldPartitionHLODActorDescSerializeHLODSubActors,

        /// <summary>Large Worlds - serialize double types as doubles</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        LargeWorldCoordinates,

        /// <summary>Deserialize old BP float and double types as real numbers for pins</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        BlueprintPinsUseRealNumbers,

        /// <summary>Changed shadow defaults for directional light components, version needed to not affect old things</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        UpdatedDirectionalLightShadowDefaults,

        /// <summary>Refresh geometry collections that had not already generated convex bodies.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        GeometryCollectionConvexDefaults,

        /// <summary>Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosClothFasterDamping,

        /// <summary>Serialize LandscapeActorGuid in FLandscapeActorDesc sub class.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        WorldPartitionLandscapeActorDescSerializeLandscapeActorGuid,

        /// <summary>add inertia tensor and rotation of mass to convex </summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        AddedInertiaTensorAndRotationOfMassAddedToConvex,

        /// <summary>Storing inertia tensor as vec3 instead of matrix.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChaosInertiaConvertedToVec3,

        /// <summary>For Blueprint real numbers, ensure that legacy float data is serialized as single-precision</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        SerializeFloatPinDefaultValuesAsSinglePrecision,

        /// <summary>Upgrade the BlendMasks array in existing LayeredBoneBlend nodes</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        AnimLayeredBoneBlendMasks,

        /// <summary>Uses RG11B10 format to store the encoded reflection capture data on mobile</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        StoreReflectionCaptureEncodedHDRDataInRG11B10Format,

        /// <summary>Add WithSerializer type trait and implementation for FRawAnimSequenceTrack</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        RawAnimSequenceTrackSerializer,

        /// <summary>Removed font from FEditableTextBoxStyle, and added FTextBlockStyle instead.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        RemoveDuplicatedStyleInfo,

        /// <summary>Added member reference to linked anim graphs</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        LinkedAnimGraphMemberReference,

        /// <summary>Changed default tangent behavior for new dynamic mesh components</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        DynamicMeshComponentsDefaultUseExternalTangents,

        /// <summary>Added resize methods to media capture</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        MediaCaptureNewResizeMethods,

        /// <summary>Function data stores a map from work to debug operands</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        RigVMSaveDebugMapInGraphFunctionData,

        /// <summary>Changed default Local Exposure Contrast Scale from 1.0 to 0.8</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        LocalExposureDefaultChangeFrom1,

        /// <summary>Serialize bActorIsListedInSceneOutliner in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        WorldPartitionActorDescSerializeActorIsListedInSceneOutliner,

        /// <summary>Disabled opencolorio display configuration by default</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        OpenColorIODisabledDisplayConfigurationDefault,

        /// <summary>Serialize ExternalDataLayerAsset in WorldPartitionActorDesc</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        WorldPartitionExternalDataLayers,

        /// <summary>Fix Chaos Cloth fictitious angular scale bug that requires existing parameter rescaling.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        ChaosClothFictitiousAngularVelocitySubframeFix,

        /// <summary>Store physics thread particles data in single precision</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        SinglePrecisonParticleDataPT,

        /// <summary>Orthographic Near and Far Plane Auto-resolve enabled by default</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        OrthographicAutoNearFarPlane,

        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    public enum FNiagaraObjectVersion
    {
        /// <summary>Before any version changes were made</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        [Introduced(EngineVersion.VER_UE4_21)]
        SkeletalMeshVertexSampling = 1,

        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,

        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }

    public enum FNiagaraCustomVersion
    {
        /// <summary>Before any version changes were made in niagara</summary>
        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]
        BeforeCustomVersionWasAdded = 0,

        /// <summary>Reworked vm external function binding to be more robust.</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        VMExternalFunctionBindingRework,

        /// <summary>Making all Niagara files reference the version number, allowing post loading recompilation if necessary.</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        PostLoadCompilationEnabled,

        /// <summary>Moved some runtime cost from external functions into the binding step and used variadic templates to neaten that code greatly.</summary>
        [Introduced(EngineVersion.VER_UE4_16)]
        VMExternalFunctionBindingReworkPartDeux,

        /// <summary>Moved per instance data needed for certain data interfaces out to it's own struct.</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        DataInterfacePerInstanceRework,

        /// <summary>Added shader maps and corresponding infrastructure</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        NiagaraShaderMaps,

        /// <summary>Combined Spawn, Update, and Event scripts into one graph.</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        UpdateSpawnEventGraphCombination,

        /// <summary>Reworked data layout to store float and int data separately.</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        DataSetLayoutRework,

        /// <summary>Reworked scripts to support emitter and system scripts</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        AddedEmitterAndSystemScripts,

        /// <summary>Rework of script execution contexts to allow better reuse and reduce overhead of parameter handling. </summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        ScriptExecutionContextRework,

        /// <summary>Removed the Niagara variable ID's making hookup impossible until next compile</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        RemovalOfNiagaraVariableIDs,

        /// <summary>System and emitter script simulations.</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        SystemEmitterScriptSimulations,

        /// <summary>Adding integer random to VM. TODO: The vm really needs its own versioning system that will force a recompile when changes.</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        IntegerRandom,

        /// <summary>Added emitter spawn attributes</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        AddedEmitterSpawnAttributes,

        /// <summary>cooking of shader maps and corresponding infrastructure</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        NiagaraShaderMapCooking,

        /// <summary>don't serialize shader maps for system scripts</summary>
        [Introduced(EngineVersion.VER_UE4_18)]
        NiagaraShaderMapCooking2,

        /// <summary>Added script rapid iteration variables, usually top-level module parameters...</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddedScriptRapidIterationVariables,

        /// <summary>Added type to data interface infos</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        AddedTypeToDataInterfaceInfos,

        /// <summary>Hooked up autogenerated default values for function call nodes.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        EnabledAutogeneratedDefaultValuesForFunctionCallNodes,

        /// <summary>Now curve data interfaces have look-up tables on by default.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        CurveLUTNowOnByDefault,

        /// <summary>Scripts now use a guid for identification instead of an index when there are more than one with the same usage.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        ScriptsNowUseAGuidForIdentificationInsteadOfAnIndex,

        /// <summary>don't serialize shader maps for update scripts</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        NiagaraCombinedGPUSpawnUpdate,

        /// <summary>don't serialize shader maps for emitters that don't run on gpu.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        DontCompileGPUWhenNotNeeded,

        [Introduced(EngineVersion.VER_UE4_19)]
        LifeCycleRework,

        /// <summary>We weren't serializing event data sets previously.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        NowSerializingReadWriteDataSets,

        /// <summary>Forcing the internal parameter map vars to be reset between emitter calls.</summary>
        [Introduced(EngineVersion.VER_UE4_19)]
        TranslatorClearOutBetweenEmitters,

        /// <summary>added sampler shader params based on DI buffer descriptors</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        AddSamplerDataInterfaceParams,

        /// <summary>Need to force the GPU shaders to recompile</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        GPUShadersForceRecompileNeeded,

        /// <summary>The playback range for the timeline is now stored in the system editor data.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        PlaybackRangeStoredOnSystem,

        /// <summary>All cached values will auto-recompile.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        MovedToDerivedDataCache,

        /// <summary>Data interfaces are preallocated</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        DataInterfacesNotAllocated,

        /// <summary>emitter scripts are built using "Emitter." instead of the full name.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        EmittersHaveGenericUniqueNames,

        /// <summary>no longer have compiler version enum value in this list, instead moved to a guid, which works better for the DDC</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        MovingTranslatorVersionToGuid,

        /// <summary>adding a parameter map in/out to the data set base node</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        AddingParamMapToDataSetBaseNode,

        /// <summary>refactor of CS parameters allowing regular params as well as buffers.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        DataInterfaceComputeShaderParamRefactor,

        /// <summary>bumping version and forcing curves to regen their LUT on version change.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        CurveLUTRegen,

        /// <summary>Changing the graph generation for assignment nodes so that it uses a "Begin Defaults" node where appropriate.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        AssignmentNodeUsesBeginDefaults,

        /// <summary>Updating the usage flage bitmask for assignment nodes to match the part of the stack it's used in.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        AssignmentNodeHasCorrectUsageBitmask,

        /// <summary>Emitter local space is compiled into the hlsl as a literal constant to expose it to emitter scripts and allow for some better optimization of particle transforms.</summary>
        [Introduced(EngineVersion.VER_UE4_20)]
        EmitterLocalSpaceLiteralConstant,

        /// <summary>The cpu cache of the texture is now directly serialized instead of using array property serialization.</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        TextureDataInterfaceUsesCustomSerialize,

        /// <summary>The texture data interface now streams size info</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        TextureDataInterfaceSizeSerialize,

        /// <summary>API to skeletal mesh interface was improved but requires a recompile and some graph fixup.</summary>
        [Introduced(EngineVersion.VER_UE4_21)]
        SkelMeshInterfaceAPIImprovements,

        /// <summary>Only do op add pin fixup on existing nodes which are before this version</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        ImproveLoadTimeFixupOfOpAddPins,

        /// <summary>Moved commonly used input metadata out of the strin/string property metadata map to actual properties on the metadata struct.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        MoveCommonInputMetadataToProperties,

        /// <summary>Move to using the traversed graph hash and the base script id for the FNiagaraVMExecutableDataId instead of the change id guid to prevent invalidating the DDC.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        UseHashesToIdentifyCompileStateOfTopLevelScripts,

        /// <summary>Reworked how the metadata is stored in NiagaraGraph from storing a Map of FNiagaraVariableMetaData to storing a map of UNiagaraScriptVariable* to be used with the Details panel.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        MetaDataAndParametersUpdate,

        /// <summary>Moved the emitter inheritance data from the emitter handle to the emitter to allow for chained emitter inheritance.</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        MoveInheritanceDataFromTheEmitterHandleToTheEmitter,

        /// <summary>Add property to all Niagara scripts indicating whether or not they belong to the library</summary>
        [Introduced(EngineVersion.VER_UE4_23)]
        AddLibraryAssetProperty,

        /// <summary>Addding additional defines to the GPU script</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        AddAdditionalDefinesProperty,

        /// <summary>Remove the random compile id guids from the cached script usage and from the compile and script ids since the hashes serve the same purpose and are deterministic.</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        RemoveGraphUsageCompileIds,

        /// <summary>Adding UseRapidIterationParams and DetailLevelMask to the GPU script</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        AddRIAndDetailLevel,

        /// <summary>Changing the system and emitter compiled data to shared pointers to deal with lifetime issues in the editor.  They now are handled directly in system serialize.</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        ChangeEmitterCompiledDataToSharedRefs,

        /// <summary>Sorting on Renderers is disabled by default, we add a version to maintain existing systems that expected sorting to be enabled</summary>
        [Introduced(EngineVersion.VER_UE4_24)]
        DisableSortingByDefault,

        /// <summary>Convert TMap into TArray to save memory, TMap contains an inline allocator which pushes the size to 80 bytes</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        MemorySaving,

        /// <summary>Added a new value to the script usage enum, and we need a custom version to fix the existing bitfields.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        AddSimulationStageUsageEnum,

        /// <summary>Save the functions generated by a GPU data interface inside FNiagaraDataInterfaceGPUParamInfo</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        AddGeneratedFunctionsToGPUParamInfo,

        /// <summary>Removed DetailLevel in favor of FNiagaraPlatfomSet based selection of per platform settings.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        PlatformScalingRefactor,

        /// <summary>Promote parameters used across script executions to the Dataset, and Demote unused parameters.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        PrecompileNamespaceFixup,

        /// <summary>Postload fixup in UNiagaraGraph to fixup VariableToScriptVariable map entries being null.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        FixNullScriptVariables,

        /// <summary>Move FNiagaraVariableMetaData from storing scope enum to storing registered scope name.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        PrecompileNamespaceFixup2,

        /// <summary>Enable the simulation stage flag by default in the usage bitmask of modules and functions</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        SimulationStageInUsageBitmask,

        /// <summary>Fix graph parameter map parameters on post load so that they all have a consisten parsable format and update the UI to show and filter based on these formats.</summary>
        [Introduced(EngineVersion.VER_UE4_25)]
        StandardizeParameterNames,

        /// <summary>Make sure that UNiagaraComponents only have override maps for User variables.</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        ComponentsOnlyHaveUserVariables,

        /// <summary>Refactor the options for UV settings on the ribbon renderer.</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        RibbonRendererUVRefactor,

        /// <summary>Replace the TypeDefinition in VariableBase with an index into the type registry</summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        VariablesUseTypeDefRegistry,

        /// <summary>Expand the visibility options of the scripts to be able to hide a script completely from the user </summary>
        [Introduced(EngineVersion.VER_UE4_26)]
        AddLibraryVisibilityProperty,

        [Introduced(EngineVersion.VER_UE4_26)]
        SignificanceHandlers,

        /// <summary>Added support for multiple versions of script data</summary>
        [Introduced(EngineVersion.VER_UE4_27)]
        ModuleVersioning,

        [Introduced(EngineVersion.VER_UE4_27)]
        MoveDefaultValueFromFNiagaraVariableMetaDataToUNiagaraScriptVariable,

        /// <summary>Changed the default mode from deterministic to non-deterministic which matches emitters</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        ChangeSystemDeterministicDefault,

        /// <summary>Update static switch pins to use the PersistentId from their script variable so that when they're renamed their values aren't lost when reallocating pins.</summary>
        [Introduced(EngineVersion.VER_UE5_0)]
        StaticSwitchFunctionPinsUsePersistentGuids,

        /// <summary>Extended visibility culling options and moved properties into their own struct.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        VisibilityCullingImprovements,

        [Introduced(EngineVersion.VER_UE5_1)]
        AddBakerCameraBookmarks,

        /// <summary>Function call node refresh from external changes has been refactored so that they don't need to populate their name bindings every load.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        PopulateFunctionCallNodePinNameBindings,

        /// <summary>Changed the default value for the component renderer's OnlyCreateComponentsOnParticleSpawn property</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        ComponentRendererSpawnProperty,

        /// <summary>Previous repopulate didn't handle module attributes like Particles.Module.Name so they need to be repopulated for renaming to work correctly.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        RepopulateFunctionCallNodePinNameBindings,

        /// <summary>Event spawns now optionally update Initial. attribute values. New default is true but old data is kept false to maintain existing behavior.</summary>
        [Introduced(EngineVersion.VER_UE5_1)]
        EventSpawnsUpdateInitialAttributeValues,

        /// <summary>Adds list of variadic parameters to the information about GPU functions.</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        AddVariadicParametersToGPUFunctionInfo,

        /// <summary>Some data fixup for NiagaraNodeWithDynamicPins.</summary>
        [Introduced(EngineVersion.VER_UE5_2)]
        DynamicPinNodeFixup,

        /// <summary>Ribbon renderer will default to unique ID rather than normalized age to make more things 'just work'</summary>
        [Introduced(EngineVersion.VER_UE5_3)]
        RibbonRendererLinkOrderDefaultIsUniqueID,

        /// <summary>Renderer SubImage Blends are enabled by default</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        SubImageBlendEnabledByDefault,

        /// <summary>Ribbon renderer will use geometry normals by default rather than screen / facing aligned normals</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        RibbonPlaneUseGeometryNormals,

        /// <summary>Actors velocity is used for the initial velocity before the component has any tracking, old assets use the old zero velocity</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        InitialOwnerVelocityFromActor,

        /// <summary>FNiagaraParameterBindingWithValue wouldn't necessarily have the appropriate ResolvedParameter namespace when it comes to emitter merging</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        ParameterBindingWithValueRenameFixup,

        /// <summary>Sim Cache moved to bulk data by default</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        SimCache_BulkDataVersion1,

        /// <summary>Decoupling of 'Template' and 'Inheritance'</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        InheritanceUxRefactor,

        /// <summary>NDC Read DIs will not override spawn group by default when spawning particles. Old content will remain unchanged.</summary>
        [Introduced(EngineVersion.VER_UE5_4)]
        NDCSpawnGroupOverrideDisabledByDefault,

        /// <summary>Before it was normalized age which can introduce flickering with sorting and random lifetimes</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        CustomSortingBindingToAge,

        /// <summary>Update Initial Mesh Orientation Module</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        StatelessInitialMeshOrientationV1,

        /// <summary>Hierarchy Editor was implemented</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        HierarchyEditorScriptSupport,

        /// <summary>Added loop delay enabled to emitter state</summary>
        [Introduced(EngineVersion.VER_UE5_5)]
        EmitterStateAddLoopDelayEnabled,

        /// <summary>
        /// DO NOT ADD A NEW VERSION UNLESS YOU HAVE TALKED TO THE NIAGARA LEAD. Mismanagement of these versions can lead to data loss if it is adjusted in multiple streams simultaneously.
        /// -----new versions can be added above this line-------------------------------------------------
        /// </summary>
        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]
        VersionPlusOne,


        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]
        LatestVersion = VersionPlusOne - 1
    }
}